package com.lanou3g.code0420;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * Created by dllo on 18/4/20.
 */

//传输层协议 UDP和TCP
//socket 抽象了传输层协议
// web服务器的底层都是socket实现的，访问服务器时，可以获取iP地址
public class Server {
    // 并发ECHO服务器 ：可以同时接受多个客户端


    //ECHO 服务器  ：只能接受一个服务端
    //Echo 服务器是常见的一种小型服务器
    //作用：将客户端发送来的数据，原封不动的在发回给客户端，这样客户端可以方便的判断服务器是否好用


    public static void main(String[] args) {
        try {
            //创建一个socket服务器对象，在创建的时候绑定端口号
            // 注意，如果你重复运行该代码
            //会出现端口号被占用异常
            ServerSocket ss = new ServerSocket(7932);
            // accept()方法是socket服务器等待客户端的接入，如果没有客户端的接入，则代码会在这一行一直等下去
            // 返回值为接入进来的客户端对象

            System.out.println("服务器已启动，等待连接");
            while (true) {  //服务器永远都不会停
                Socket client = ss.accept();
                System.out.println("有一个客户端介入："+client.getInetAddress().toString()+"："+client.getPort());

              /*  //克隆百度服务器
                OutputStream os = client.getOutputStream();
                PrintWriter pw = new PrintWriter(new BufferedOutputStream(os));
              //  BufferedReader br = new BufferedReader(new InputStreamReader(FileInputStream(new File("src/com/lanou3g/code0420/test.html"))));//读html
                String header = "";
                pw.println(header); //先写html的 header

                String line = "";
                while ((line = br.readLine()) != null){
                    pw.println(line);
                    pw.flush();
                }

                //自己try－catch
                Thread.sleep(10000); // 防止太快了
                pw.println("百度复制源码"); // 字符太多，使用读文件的方式

                pw.flush();
*/


                new EchoThread(client).start();



                client.getRemoteSocketAddress();//可以获得客户端的IP地址和端口号
            }

           /* OutputStream outputStream = client.getOutputStream();  //流获取一次之后，可以一直使用
            // outputStream.write("Hello\n".getBytes());
            InputStream in = client.getInputStream();


            //取客户端的两个流
            PrintWriter pw = new PrintWriter(new OutputStreamWriter(outputStream));
            BufferedReader br = new BufferedReader(new InputStreamReader(in));

           // while (!client.isClosed()){  // 外循环没用
                //只要客户端没有断开连接，读取客户端内容
                String line = "";
                while ((line = br.readLine()) != null){

                    String echo = "ECHO:" + line;
                    pw.println(echo);
                    pw.flush();
                }
*/

            //为每一个客户端创建线程

            //}


        } catch (Exception e) {
            System.out.println("客户端断开");
            e.printStackTrace();
        }


    }
}
